home *** CD-ROM | disk | FTP | other *** search
/ Aminet 31 / Aminet 31 (1999)(Schatztruhe)[!][Jun 1999].iso / Aminet / dev / c / random.lha / random / rand-2 / rand2.c < prev    next >
Text File  |  1999-02-28  |  1KB  |  103 lines

  1. /********************************************************************
  2.  
  3.           The McGill Super-Duper Random Number Generator
  4.  
  5.              G. Marsaglia, K. Ananthanarayana, N. Paul
  6.  
  7.   
  8.  
  9.     Incorporating the Ziggurat method of sampling from decreasing
  10.  
  11.               or symmetric unimodal density functions.
  12.  
  13.                       G. Marsaglia, W.W. Tsang
  14.  
  15.   
  16.  
  17.                  Rewritten into C by E. Schneider
  18.  
  19.  *********************************************************************/
  20.  
  21.   
  22.  
  23. static unsigned long mcgn, srgn;
  24.  
  25.   
  26.  
  27. #define MULT 69069L
  28.  
  29.   
  30.  
  31. void rstart (long i1, long i2)
  32.  
  33. {
  34.  
  35.       mcgn = (unsigned long)((i1 == 0L) ? 0L : i1 | 1L);
  36.  
  37.       srgn = (unsigned long)((i2 == 0L) ? 0L : (i2 & 0x7FFL) | 1L);
  38.  
  39. }
  40.  
  41.   
  42.  
  43. long uni(void)
  44.  
  45. {
  46.  
  47.       unsigned long r0, r1;
  48.  
  49.  
  50.  
  51.       r0 = (srgn >> 15);
  52.  
  53.       r1 = srgn ^ r0;
  54.  
  55.       r0 = (r1 << 17);
  56.  
  57.       srgn = r0 ^ r1;
  58.  
  59.       mcgn = MULT * mcgn;
  60.  
  61.       r1 = mcgn ^ srgn;
  62.  
  63.       return (r1 >> 1);
  64.  
  65. }
  66.  
  67.   
  68.  
  69. long vni(void)
  70.  
  71. {
  72.  
  73.       unsigned long r0, r1;
  74.  
  75.  
  76.  
  77.       r0 = (srgn >> 15);
  78.  
  79.       r1 = srgn ^ r0;
  80.  
  81.       r0 = (r1 << 17);
  82.  
  83.       srgn = r0 ^ r1;
  84.  
  85.       mcgn = MULT * mcgn;
  86.  
  87.       r1 = mcgn ^ srgn;
  88.  
  89.       return r1;
  90.  
  91. }
  92.  
  93.  
  94.  
  95. /* 
  96.  
  97. "Anyone who consider arithmetic means of producing random number is,
  98.  
  99.  of course, in a state of sin" - John Von Neumann
  100.  
  101. */
  102.  
  103.